package com.example.origin.demo.demo;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

@RequestMapping("OOMDemo")
@RestController
public class OOMDemo {


    @GetMapping("test")
    public void test() {

        List<Byte[]> list = new ArrayList<>();
        while (true) {
            list.add(new Byte[1024 * 1024 * 1024]);
        }

    }

    static List<Byte[]> list = new ArrayList<>();

    @GetMapping("test2")
    public void test2() {

        while (true) {
            list.add(new Byte[1024 * 1024]);
        }

    }

    private List<byte[]> dataStore = new ArrayList<>();

    @GetMapping("/oom")
    public String causeOutOfMemory() {
        while (true) {
            // 不断向内存中添加大对象，直到OOM发生
            byte[] largeObject = new byte[1024 * 1024]; // 1MB大小的字节数组
            dataStore.add(largeObject);
            // 注释掉下面的代码行，以持续添加数据并更快导致OOM
            // Thread.sleep(10); // 稍微延缓添加速度，以便观察内存变化（可选）
        }
    }



}
